﻿// 下列 ifdef 块是创建使从 DLL 导出更简单的
// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 LIBRTSP_EXPORTS
// 符号编译的。在使用此 DLL 的
// 任何项目上不应定义此符号。这样，源文件中包含此文件的任何其他项目都会将
// LIBRTSP_API 函数视为是从 DLL 导入的，而此 DLL 则将用此宏定义的
// 符号视为是被导出的。
#ifdef LIBRTSP_EXPORTS
#define LIBRTSP_API extern "C" __declspec(dllexport)
#else
#define LIBRTSP_API extern "C" __declspec(dllimport)
#endif

typedef void(*audio_callback)(void* handle, void* data, int len);
typedef void(*encode_callback)(void* handle, void* data, int len, int type);
typedef void(*decode_callback)(void* handle,void* data, int len,int w,int h,int type);
//调用后内部日志将在控制台串口打印
LIBRTSP_API void	rtsp_enable_console_log();
//解码数据格式 0:rgb 1:yuv420p 2:rgba 默认是rgb 更多支持请联系开发者
LIBRTSP_API void	rtsp_pixel_format(int type);
//使能硬件解码,将尝试英伟达和英特尔硬解 默认是软解
LIBRTSP_API void	rtsp_hw_support(int value);

LIBRTSP_API void	rtsp_init();

LIBRTSP_API void	rtsp_uninit();

LIBRTSP_API void*	rtsp_generate(const char* szUrl);

LIBRTSP_API void	rtsp_set_encode_cb(void* handle, encode_callback pFunDecodeData);

LIBRTSP_API void	rtsp_set_decode_cb(void* handle, decode_callback pFunDecodeData);

LIBRTSP_API void	rtsp_set_audio_cb(void* handle, audio_callback pFunDecodeData);

LIBRTSP_API int		rtsp_release(void** handle);

LIBRTSP_API int		rtsp_start(void* handle);

LIBRTSP_API int		rtsp_stop(void* handle);

//这种接口调用帧需要手动释放
LIBRTSP_API int		rtsp_getframe(void* handle, char** data,int* len,int* w,int* h,int* type);

LIBRTSP_API void	rtsp_freeframe(char** data);

LIBRTSP_API int		rtsp_getframe_ex(void* handle, char** data, int* len, int* w, int* h, int* type);

